package com.fary.core.convert;

/**
 * 类型转换的服务接口，这是转换系统的入口，调用convert(Object, Class)进行一次线程安全的类型转换。
 */
public interface ConversionService {

	/**
	 * 判断是否可以转换
	 */
	boolean canConvert(Class<?> sourceType, Class<?> targetType);

	/**
	 * 判断是否可以转换
	 */
	boolean canConvert(TypeDescriptor sourceType, TypeDescriptor targetType);

	/**
	 * 转换类型
	 * 转换过程：首先获取合适的转换器（DefaultConversionService会配置默认的转换器，也可自定义），然后进行转换
	 */
	<T> T convert(Object source, Class<T> targetType);

	/**
	 * 转换类型
	 */
	Object convert(Object source, TypeDescriptor sourceType, TypeDescriptor targetType);

}